// SPDX-License-Identifier: GPL-2.0

/ {
	#address-cells = <1>;
	#size-cells = <1>;
	compatible = "ralink,mt7628a-soc";

	cpus {
		#address-cells = <1>;
		#size-cells = <0>;

		cpu@0 {
			compatible = "mti,mips24KEc";
			device_type = "cpu";
			reg = <0>;
		};
	};

	resetc: reset-controller {
		compatible = "ralink,rt2880-reset";
		#reset-cells = <1>;
	};

	cpuintc: interrupt-controller {
		#address-cells = <0>;
		#interrupt-cells = <1>;
		interrupt-controller;
		compatible = "mti,cpu-interrupt-controller";
	};

	palmbus@10000000 {
		compatible = "palmbus";
		reg = <0x10000000 0x200000>;
		ranges = <0x0 0x10000000 0x1FFFFF>;

		#address-cells = <1>;
		#size-cells = <1>;

		sysc: system-controller@0 {
			compatible = "ralink,mt7620a-sysc", "syscon";
			reg = <0x0 0x60>;
		};

		pinmux: pinmux@60 {
			compatible = "pinctrl-single";
			reg = <0x60 0x8>;
			#address-cells = <1>;
			#size-cells = <0>;
			#pinctrl-cells = <2>;
			pinctrl-single,bit-per-mux;
			pinctrl-single,register-width = <32>;
			pinctrl-single,function-mask = <0x1>;

			pinmux_gpio_gpio: pinmux_gpio_gpio {
				pinctrl-single,bits = <0x0 0x0 0x3>;
			};

			pinmux_spi_cs1_cs: pinmux_spi_cs1_cs {
				pinctrl-single,bits = <0x0 0x0 0x30>;
			};

			pinmux_i2s_gpio: pinmux_i2s_gpio {
				pinctrl-single,bits = <0x0 0x40 0xc0>;
			};

			pinmux_uart0_uart: pinmux_uart0_uart0 {
				pinctrl-single,bits = <0x0 0x0 0x300>;
			};

			pinmux_sdmode_sdxc: pinmux_sdmode_sdxc {
				pinctrl-single,bits = <0x0 0x0 0xc00>;
			};

			pinmux_sdmode_gpio: pinmux_sdmode_gpio {
				pinctrl-single,bits = <0x0 0x400 0xc00>;
			};

			pinmux_spi_spi: pinmux_spi_spi {
				pinctrl-single,bits = <0x0 0x0 0x1000>;
			};

			pinmux_refclk_gpio: pinmux_refclk_gpio {
				pinctrl-single,bits = <0x0 0x40000 0x40000>;
			};

			pinmux_i2c_i2c: pinmux_i2c_i2c {
				pinctrl-single,bits = <0x0 0x0 0x300000>;
			};

			pinmux_uart1_uart: pinmux_uart1_uart1 {
				pinctrl-single,bits = <0x0 0x0 0x3000000>;
			};

			pinmux_uart2_uart: pinmux_uart2_uart {
				pinctrl-single,bits = <0x0 0x0 0xc000000>;
			};

			pinmux_pwm0_pwm: pinmux_pwm0_pwm {
				pinctrl-single,bits = <0x0 0x0 0x30000000>;
			};

			pinmux_pwm0_gpio: pinmux_pwm0_gpio {
				pinctrl-single,bits = <0x0 0x10000000
						       0x30000000>;
			};

			pinmux_pwm1_pwm: pinmux_pwm1_pwm {
				pinctrl-single,bits = <0x0 0x0 0xc0000000>;
			};

			pinmux_pwm1_gpio: pinmux_pwm1_gpio {
				pinctrl-single,bits = <0x0 0x40000000
						       0xc0000000>;
			};

			pinmux_p0led_an_gpio: pinmux_p0led_an_gpio {
				pinctrl-single,bits = <0x4 0x4 0xc>;
			};

			pinmux_p1led_an_gpio: pinmux_p1led_an_gpio {
				pinctrl-single,bits = <0x4 0x10 0x30>;
			};

			pinmux_p2led_an_gpio: pinmux_p2led_an_gpio {
				pinctrl-single,bits = <0x4 0x40 0xc0>;
			};

			pinmux_p3led_an_gpio: pinmux_p3led_an_gpio {
				pinctrl-single,bits = <0x4 0x100 0x300>;
			};

			pinmux_p4led_an_gpio: pinmux_p4led_an_gpio {
				pinctrl-single,bits = <0x4 0x400 0xc00>;
			};
		};

		watchdog: watchdog@100 {
			compatible = "mediatek,mt7621-wdt";
			reg = <0x100 0x30>;

			resets = <&resetc 8>;
			reset-names = "wdt";

			interrupt-parent = <&intc>;
			interrupts = <24>;

			status = "disabled";
		};

		intc: interrupt-controller@200 {
			compatible = "ralink,rt2880-intc";
			reg = <0x200 0x100>;

			interrupt-controller;
			#interrupt-cells = <1>;

			resets = <&resetc 9>;
			reset-names = "intc";

			interrupt-parent = <&cpuintc>;
			interrupts = <2>;

			ralink,intc-registers = <0x9c 0xa0
						 0x6c 0xa4
						 0x80 0x78>;
		};

		memory-controller@300 {
			compatible = "ralink,mt7620a-memc";
			reg = <0x300 0x100>;
		};

		gpio: gpio@600 {
			compatible = "mediatek,mt7621-gpio";
			reg = <0x600 0x100>;

			gpio-controller;
			interrupt-controller;
			#gpio-cells = <2>;
			#interrupt-cells = <2>;

			interrupt-parent = <&intc>;
			interrupts = <6>;
		};

		spi: spi@b00 {
			compatible = "ralink,mt7621-spi";
			reg = <0xb00 0x100>;

			pinctrl-names = "default";
			pinctrl-0 = <&pinmux_spi_spi>;

			resets = <&resetc 18>;
			reset-names = "spi";

			#address-cells = <1>;
			#size-cells = <0>;

			status = "disabled";
		};

		uart0: uartlite@c00 {
			compatible = "ns16550a";
			reg = <0xc00 0x100>;

			pinctrl-names = "default";
			pinctrl-0 = <&pinmux_uart0_uart>;

			resets = <&resetc 12>;
			reset-names = "uart0";

			interrupt-parent = <&intc>;
			interrupts = <20>;

			reg-shift = <2>;
		};

		uart1: uart1@d00 {
			compatible = "ns16550a";
			reg = <0xd00 0x100>;

			pinctrl-names = "default";
			pinctrl-0 = <&pinmux_uart1_uart>;

			resets = <&resetc 19>;
			reset-names = "uart1";

			interrupt-parent = <&intc>;
			interrupts = <21>;

			reg-shift = <2>;
		};

		uart2: uart2@e00 {
			compatible = "ns16550a";
			reg = <0xe00 0x100>;

			pinctrl-names = "default";
			pinctrl-0 = <&pinmux_uart2_uart>;

			resets = <&resetc 20>;
			reset-names = "uart2";

			interrupt-parent = <&intc>;
			interrupts = <22>;

			reg-shift = <2>;
		};
	};

	usb_phy: usb-phy@10120000 {
		compatible = "mediatek,mt7628-usbphy";
		reg = <0x10120000 0x1000>;

		#phy-cells = <0>;

		ralink,sysctl = <&sysc>;
		resets = <&resetc 22 &resetc 25>;
		reset-names = "host", "device";
	};

	ehci@101c0000 {
		compatible = "generic-ehci";
		reg = <0x101c0000 0x1000>;

		phys = <&usb_phy>;
		phy-names = "usb";

		interrupt-parent = <&intc>;
		interrupts = <18>;
	};
};
